/**************************************************************************************
*
*	Copyright (C) 2009 - 2012 Brent Andrew O. Chua - See LICENSE.txt for more info.
*		
*	Filename	-	EventComponent.h
*
*	Description -	Component specific events. 
*
*	Comments	-	
*
*	Modification History:
*			Name			   Date					Description
*			MrCodeSushi	-	08/29/2013	-	Creation of this file
**************************************************************************************/
#ifndef _PSX_EVENT_COMPONENT_H_
#define _PSX_EVENT_COMPONENT_H_

#include "PulseSTD.h"
#include "IEvent.h"

namespace Pulse
{

	class EventComponentBase : public IEvent
	{
	public:

		EventComponentBase( const IComponent * const _pComponent )
			: pComponent( _pComponent )
		{
		}

		virtual ~EventComponentBase( void ) { }

		const IComponent * GetComponent( void ) const { return pComponent; }

	protected:

		const IComponent * const pComponent;

	};

	class EventComponentAdd : public EventComponentBase
	{
	public:

		EventComponentAdd( const IComponent * const pComponent )
			: EventComponentBase( pComponent )
		{
		}

		virtual const EEvent::Type GetEventType( void ) const sealed { return EEvent::COMPONENT_ADD; };

	};

	class EventComponentRemove : public EventComponentBase
	{
	public:

		EventComponentRemove( const IComponent * const pComponent )
			: EventComponentBase( pComponent )
		{
		}

		virtual const EEvent::Type GetEventType( void ) const sealed { return EEvent::COMPONENT_REMOVE; };

	};
}

#endif /* _PSX_EVENT_COMPONENT_H_ */